Set an error if we encounter properties without values set (#451303,
authorJohan Dahlin <johan@src.gnome.org>
Wed, 27 Jun 2007 00:37:50 +0000 (00:37 +0000)
committerJohan Dahlin <johan@src.gnome.org>
Wed, 27 Jun 2007 00:37:50 +0000 (00:37 +0000)
    * gtk/gtkbuilder.h (enum):
    * gtk/gtkbuilderparser.c (end_element):
    * tests/buildertest.c (test_parser):
    Set an error if we encounter properties without values set
    (#451303, Philip Withnall)

svn path=/trunk/; revision=18252

ChangeLog
gtk/gtkbuilder.h
gtk/gtkbuilderparser.c
tests/buildertest.c

index f6465ac67325f38936de2587112c5a58e237c432..d62764592fb3f0e78582fa60aebd5fcbbc4bda70 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-06-26  Johan Dahlin  <jdahlin@async.com.br>
 
+       * gtk/gtkbuilder.h (enum): 
+       * gtk/gtkbuilderparser.c (end_element): 
+       * tests/buildertest.c (test_parser): 
+       Set an error if we encounter properties without values set
+       (#451303, Philip Withnall)
+       
        * demos/gtk-demo/builder.c (do_builder): Connect the
        destroy signal in the example instead of the ui file.
        Also set the screen and title of the window.
index 767d7220ad796487a516940c863d6e45bbb2c1c3..36348b25acc5d2c96248d82795fe83e8e5fd9149 100644 (file)
@@ -43,7 +43,8 @@ typedef enum
   GTK_BUILDER_ERROR_UNHANDLED_TAG,
   GTK_BUILDER_ERROR_MISSING_ATTRIBUTE,
   GTK_BUILDER_ERROR_INVALID_ATTRIBUTE,
-  GTK_BUILDER_ERROR_INVALID_TAG
+  GTK_BUILDER_ERROR_INVALID_TAG,
+  GTK_BUILDER_ERROR_MISSING_PROPERTY_VALUE
 } GtkBuilderError;
 
 GQuark gtk_builder_error_quark (void);
index 25b3479946fb1065ab30d31d4ea92b9b120c5a5c..ea2df67e64bb47c32dbc7005054603762a7ab7d8 100644 (file)
@@ -139,6 +139,24 @@ error_invalid_tag (ParserData *data,
                 line_number, char_number, tag);
 }
 
+static void
+error_missing_property_value (ParserData *data,
+                             GError **error)
+{
+  gint line_number, char_number;
+
+  g_markup_parse_context_get_position (data->ctx,
+                                       &line_number,
+                                       &char_number);
+
+  g_set_error (error,
+              GTK_BUILDER_ERROR,
+              GTK_BUILDER_ERROR_MISSING_PROPERTY_VALUE,
+              "%s:%d:%d <property> must have a value set",
+              data->filename,
+              line_number, char_number);
+}
+
 static GObject *
 builder_construct (ParserData *data,
                    ObjectInfo *object_info)
@@ -707,6 +725,12 @@ end_element (GMarkupParseContext *context,
       PropertyInfo *prop_info = state_pop_info (data, PropertyInfo);
       CommonInfo *info = state_peek_info (data, CommonInfo);
 
+      if (!prop_info->data)
+       {
+         error_missing_property_value (data, error);
+         return;
+       }
+      
       /* Normal properties */
       if (strcmp (info->tag.name, "object") == 0)
         {
index 3c6ab29b178695b346aa29498daf6844ea00908d..3367bdcd1fb80bdbd6cef19364fd1bf97c84e384 100644 (file)
@@ -72,6 +72,13 @@ gboolean test_parser (void)
   g_return_val_if_fail (strcmp (error->message, "<input>:1:74 'object' is not a valid tag here") == 0, FALSE);
   g_error_free (error);
 
+  error = NULL;
+  gtk_builder_add_from_string (builder, "<interface><object class=\"GtkWindow\" id=\"a\"><property name=\"type\"/></object></interface>", -1, &error);
+  g_assert (error != NULL);
+  g_return_val_if_fail (strcmp (error->message, "<input>:1:67 <property> must have a value set") == 0, FALSE);
+  g_error_free (error);
+
+  
   return TRUE;
 }